package Testpack1;

public class Encapsulation {
    //封装
    //原则：对象代表什么，就得封装对应的数据，并提供数据对应的行为。
    //告诉我们如何正确设计对象的属性和方法。
    //对象代表的东西通常就是现实生活中的事物
    //      即属性就是该事物的状态信息
    //      方法就是该事物能够做什么

    //private 关键字
    //是一个权限修饰符。
    //可以修饰成员(成员变量和成员方法)
    //被private修饰的成员只能在本类中才能访问。
    //针对private修饰的成员变量，如果需要被其他类使用，提供相应的操作。
    private String name;
    private int age;
    private String gender;

    //public权限修饰符
    //public修饰的成员方法，外界可以直接使用。

    public void setName(String str) {
        name = str;
    }

    public String getName(String str) {
        return name;
    }

    public void setGender(String str) {
        gender = str;
    }

    public String getGender(String str) {
        return gender;
    }

    //setAge方法的作用：
    //为age属性赋值。
    //参数是int类型的变量。
    public void setAge(int age) {
        if(age < 0 || age > 120) {
            System.out.println("年龄不合理");
        }else {
            this.age = age;
        }
    }

    public int getAge() {
        return age;
    }

    //成员变量和局部变量的区别：
    //在类中的位置不同
    //成员变量：类中方法外
    //局部变量：方法内部或者方法声明上(形式参数)
    //方法内部不能直接访问age属性，需要使用this.age。
    //this.age  代表的是成员变量。

    //构造方法
    //构造方法是专门用来创建对象的方法，当我们通过关键字new来创建对象时，其实就是在调用构造方法。
    //格式：
    //public 类名称(参数类型 参数名称) {
    //    方法体
    //}
    //执行时机：
    //创建对象的时候。
    //每创建一次对象，就会执行一次构造方法。
    //作用：
    //使用带有参数的构造方法，在创建对象的时候，就直接指定对象的属性值。
    //注意事项：
    //1.构造方法的名称必须和所在的类名称完全一样，就连大小写也要一样。
    //2.构造方法不要写返回值类型，连void都不写。
    //3.构造方法不能return一个具体地返回值。
    //4.如果没有编写任何构造方法，那么编译器将会默认赠送一个构造方法，没有参数、方法体什么事情都不做。
    //5.一旦编写了至少一个构造方法，那么编译器将不再赠送。
    //6.构造方法也是可以进行重载的。
    //重载：方法名称相同，参数列表不同。


}
